package com.xunyin.modules.couponnew.service;


import com.xunyin.common.service.BaseService;
import com.xunyin.modules.couponnew.domain.MtCouponGroup;
import com.xunyin.modules.couponnew.service.dto.GroupDataDto;
import com.xunyin.modules.couponnew.service.dto.ReqCouponGroupDto;
import com.xunyin.modules.couponnew.service.dto.MtCouponGroupQueryCriteria;
import com.xunyin.pagination.PaginationRequest;
import com.xunyin.pagination.PaginationResponse;
import org.springframework.data.domain.Pageable;
import org.springframework.ui.Model;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 卡券分组业务接口
 * <p>
 * Created by xunyin
 * CopyRight 讯音云商 https://www.tonetn.com
 */
public interface CouponGroupService extends BaseService<MtCouponGroup> {

    /**
     * 分页查询分组列表
     *
     * @param paginationRequest
     * @return
     */
    PaginationResponse<MtCouponGroup> queryCouponGroupListByPagination(PaginationRequest paginationRequest);

    /**
     * 查询数据分页
     *
     * @param criteria 条件
     * @param pageable 分页参数
     * @return Map<String, Object>
     */
    Map<String, Object> queryAll(MtCouponGroupQueryCriteria criteria, Pageable pageable);

    /**
     * 查询所有数据不分页
     *
     * @param criteria 条件参数
     * @return List<MtCouponGroup>
     */
    List<MtCouponGroup> queryAll(MtCouponGroupQueryCriteria criteria);

    /**
     * 添加卡券分组
     *
     * @param reqCouponGroupDto
     */
    MtCouponGroup addCouponGroup(ReqCouponGroupDto reqCouponGroupDto);

    /**
     * 修改卡券分组
     *
     * @param reqCouponGroupDto
     */
    MtCouponGroup updateCouponGroup(ReqCouponGroupDto reqCouponGroupDto);

    /**
     * 根据组ID获取分组信息
     *
     * @param id 分组ID
     */
    MtCouponGroup queryCouponGroupById(Integer id);

    /**
     * 根据分组ID 删除分组信息
     *
     * @param id       分组ID
     * @param operator 操作人
     */
    void deleteCouponGroup(Integer id, String operator);

    /**
     * 根据分组ID 获取券种类数量
     *
     * @param id 分组ID
     */
    Integer getCouponNum(Integer id);

    /**
     * 根据分组ID 获取券总价值
     *
     * @param id 分组ID
     */
    BigDecimal getCouponMoney(Integer id);

    /**
     * 获取已发放套数
     *
     * @param id 分组ID
     */
    Integer getSendNum(Integer id);

    /**
     * 导入发券列表
     *
     * @param file     excel文件
     * @param operator 操作者
     */
    String importSendCoupon(MultipartFile file, String operator, String filePath);

    /**
     * 保存文件
     *
     * @param file    excel文件
     * @param request 操作者
     */
    String saveExcelFile(MultipartFile file, HttpServletRequest request) throws Exception;

    /**
     * 获取分组统计数据
     *
     * @param groupId 分组ID
     */
    GroupDataDto getGroupData(Integer groupId, HttpServletRequest request, Model model);
}
